#include "initconfig.h"

InitConfig::InitConfig(QObject *parent) : QObject(parent)
{
  QFile file("./assets/config.json");
  if (!file.open(QIODevice::ReadOnly)) {
      qDebug() << "can't open error!";
      return;
    }

  // 读取文件的全部内容
  QTextStream stream(&file);
//  stream.setCodec("UTF-8");		// 设置读取编码是UTF8  stream.setEncoding(QStringConverter::Utf8);
  QString str = stream.readAll();
  //  qDebug() << str;

  file.close();

  // QJsonParseError类用于在JSON解析期间报告错误。
  QJsonParseError jsonError;
  // 将json解析为UTF-8编码的json文档，并从中创建一个QJsonDocument。
  // 如果解析成功，返回QJsonDocument对象，否则返回null
  configDoc = QJsonDocument::fromJson(str.toUtf8(), &jsonError);
  // 判断是否解析失败
  if (jsonError.error != QJsonParseError::NoError && !configDoc.isNull()) {
      qDebug() << "Json格式错误！" << jsonError.error;
      return;
    }

  configRootObj = configDoc.object();

  initTargetFile();
}

//初始化target.json文件
 void InitConfig::initTargetFile()
{
  QFile file("./assets/target.json");
  if (!file.open(QIODevice::ReadOnly)) {
      qDebug() << "can't open error!";
      return;
    }

  // 读取文件的全部内容
  QTextStream stream(&file);
//  stream.setCodec("UTF-8");		// 设置读取编码是UTF8
    stream.setEncoding(QStringConverter::Utf8);
  QString str = stream.readAll();
  //  qDebug() << str;

  file.close();

  // QJsonParseError类用于在JSON解析期间报告错误。
  QJsonParseError jsonError;
  // 将json解析为UTF-8编码的json文档，并从中创建一个QJsonDocument。
  // 如果解析成功，返回QJsonDocument对象，否则返回null
  targetDoc = QJsonDocument::fromJson(str.toUtf8(), &jsonError);
  // 判断是否解析失败
  if (jsonError.error != QJsonParseError::NoError && !targetDoc.isNull()) {
      qDebug() << "Json格式错误！" << jsonError.error;
      return;
    }
  targetRootObj = targetDoc.object();

  for(int i = 0;i < 22;i++){

      QString arg1 = QString::number(i);
      QJsonValue valueNumber = targetRootObj.value(arg1);

      if(valueNumber.isUndefined()){

          QJsonObject point1;
          QJsonObject point2;
          QJsonObject scaleFactor;
          point1.insert("x",0);
          point1.insert("y",0);

          point2.insert("x",0);
          point2.insert("y",0);

          scaleFactor.insert("x",0);
          scaleFactor.insert("y",0);

          QJsonArray jsonArray;
          \
          QJsonObject obj1;
          obj1.insert("left-down-point",point1);
          QJsonObject obj2;
          obj2.insert("right-up-point",point2);
          QJsonObject obj3;
          obj3.insert("scale-factor",scaleFactor);

          jsonArray.append(obj1);
          jsonArray.append(obj2);
          jsonArray.append(obj3);

          targetRootObj.insert(arg1,jsonArray);
        }

    }
  // 将object设置为本文档的主要对象
  targetDoc.setObject(targetRootObj);
  // 重写打开文件，覆盖原有文件，达到删除文件全部内容的效果
  QFile writeFile("./assets/target.json");
  if (!writeFile.open(QFile::WriteOnly | QFile::Truncate)) {
      qDebug() << "can't open error!";
      return;
    }
  // 将修改后的内容写入文件
  QTextStream wirteStream(&writeFile);
//  wirteStream.setCodec("UTF-8");		// 设置读取编码是UTF8
    wirteStream.setEncoding(QStringConverter::Utf8);
  wirteStream << targetDoc.toJson();		// 写入文件
  writeFile.close();

}


const QString InitConfig::getStringValue(QString arg1, QString arg2)
{
  QJsonValue value = configRootObj.value(arg1);
  QJsonObject obj = value.toObject();
  QJsonValue value1 = obj.value(arg2);
  return value1.toString();
}

 double InitConfig::getDoubleValue(QString arg1, QString arg2)
{
  QJsonValue value = configRootObj.value(arg1);
  QJsonObject obj = value.toObject();
  QJsonValue value1 = obj.value(arg2);
  return value1.toDouble();
}

 int InitConfig::getIntValue(QString arg1, QString arg2)
{
  QJsonValue value = configRootObj.value(arg1);
  QJsonObject obj = value.toObject();
  QJsonValue value1 = obj.value(arg2);
  return value1.toInt();
}

 void InitConfig::setIntValue(QString arg1, QString arg2, int value)
{
  QJsonValue jsonValue = configRootObj.value(arg1);

  if (jsonValue.type() == QJsonValue::Object) {
      QJsonObject updateValue = jsonValue.toObject();
      updateValue[arg2] = value;
      configRootObj[arg1] = updateValue;
    }
  // 将object设置为本文档的主要对象
  configDoc.setObject(configRootObj);
    mutex.lock();
  // 重写打开文件，覆盖原有文件，达到删除文件全部内容的效果
  QFile writeFile("./assets/config.json");
  if (!writeFile.open(QFile::WriteOnly | QFile::Truncate)) {
      qDebug() << "can't open error!";
      return;
    }
  // 将修改后的内容写入文件
  QTextStream wirteStream(&writeFile);
//  wirteStream.setCodec("UTF-8");		// 设置读取编码是UTF8
    wirteStream.setEncoding(QStringConverter::Utf8);
  wirteStream << configDoc.toJson();		// 写入文件
  writeFile.close();
  mutex.unlock();
}

 void InitConfig::setStringValue(QString arg1, QString arg2, QString value)
{
  QJsonValue jsonValue = configRootObj.value(arg1);

  if (jsonValue.type() == QJsonValue::Object) {
      QJsonObject updateValue = jsonValue.toObject();
      updateValue[arg2] = value;
      configRootObj[arg1] = updateValue;
    }
  // 将object设置为本文档的主要对象
  configDoc.setObject(configRootObj);
    mutex.lock();
  // 重写打开文件，覆盖原有文件，达到删除文件全部内容的效果
  QFile writeFile("./assets/config.json");
  if (!writeFile.open(QFile::WriteOnly | QFile::Truncate)) {
      qDebug() << "can't open error!";
      return;
    }
  // 将修改后的内容写入文件
  QTextStream wirteStream(&writeFile);
//  wirteStream.setCodec("UTF-8");		// 设置读取编码是UTF8
    wirteStream.setEncoding(QStringConverter::Utf8);
  wirteStream << configDoc.toJson();		// 写入文件
  writeFile.close();
  mutex.unlock();
}

//设置校准有关参数
 bool InitConfig::setArgXY(QString arg1, QString arg2, double arg3,double arg4)
{
  QJsonValue valueNumber = targetRootObj.value(arg1);

  QJsonArray jsonArray = valueNumber.toArray();

  for(int i = 0;i <  jsonArray.size();i++){

      QJsonObject obj = jsonArray[i].toObject();

      QJsonValue value = obj.value(arg2);

      if(!value.isUndefined()){

          QJsonObject updateValue = value.toObject();
          updateValue["x"] = arg3;
          updateValue["y"] = arg4;

          obj[arg2] = updateValue;

          jsonArray.replace(i,obj);

          targetRootObj[arg1] = jsonArray;
        }
    }
  // 将object设置为本文档的主要对象
  targetDoc.setObject(targetRootObj);
  mutex.lock();
  // 重写打开文件，覆盖原有文件，达到删除文件全部内容的效果
  QFile writeFile("./assets/target.json");
  if (!writeFile.open(QFile::WriteOnly | QFile::Truncate)) {
      qDebug() << "can't open error!";
      return false;
    }

  // 将修改后的内容写入文件
  QTextStream wirteStream(&writeFile);
//  wirteStream.setCodec("UTF-8");		// 设置读取编码是UTF8
    wirteStream.setEncoding(QStringConverter::Utf8);
  wirteStream << targetDoc.toJson();		// 写入文件
  writeFile.close();
  mutex.unlock();

  return true;

}

 double InitConfig::getXorY(QString arg1, QString arg2, QString arg3)
{
  double res = 0;
  QJsonValue valueNumber = targetRootObj.value(arg1);

  QJsonArray jsonArray = valueNumber.toArray();

  for(int i = 0;i <  jsonArray.size();i++){

      QJsonObject obj = jsonArray[i].toObject();

      QJsonValue value = obj.value(arg2);

      if(!value.isUndefined()){
          QJsonObject updateValue = value.toObject();
          res = updateValue[arg3].toDouble();
        }
    }
  return res;
}

